package demo1;

import java.util.ArrayList;
import java.util.List;

public class HomeWork {
    //杨辉三角
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        //逐行打印
        for(int i = 0; i < numRows; i++) {
            List<Integer> row = new ArrayList<Integer>();
            //按列打印
            for(int j = 0; j <= i; j++) {
                //如果是第一列或者是最后一列，为 1
                if(j == 0 || j == i) {
                    row.add(1);
                } else {
                    //第i-1行第j-1列 和 第i-1行第j列 的和
                    int cur = result.get(i-1).get(j-1) + result.get(i-1).get(j);
                    row.add(cur);
                }
            }
            //此时构造好了一行，把一行添加到 result 中
            result.add(row);
        }
        return result;
    }


    //合并两个有序数组
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //指向nums1的最后一个有效元素
        int p1 = m - 1;
        //指向nums2的最后一个元素
        int p2 = n - 1;
        //指向nums1的最后一个元素
        int p = m + n - 1;
        //保证指针不越界
        while(p1 >= 0 && p2 >= 0) {
            if(nums1[p1] > nums2[p2]) {
                nums1[p] = nums1[p1];
                p1--;
            } else {
                nums1[p] = nums2[p2];
                p2--;
            }
            p--;
        }
        //如果nums2中有剩余元素，直接拷贝到nums1中
        while(p2 >= 0) {
            nums1[p] = nums2[p2];
            p2--;
            p--;
        }
    }

}
